#!/bin/bash

# 设置颜色输出
GREEN='\033[0;32m'
BLUE='\033[0;34m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color

# 默认为前台运行
DEMON_MODE=false

# 解析命令行参数
while [[ $# -gt 0 ]]; do
  case $1 in
    -d|--daemon)
      DEMON_MODE=true
      shift
      ;;
    -h|--help)
      echo "用法: $0 [选项]"
      echo "选项:"
      echo "  -d, --daemon    后台运行模式"
      echo "  -h, --help      显示此帮助信息"
      exit 0
      ;;
    *)
      echo "未知参数: $1"
      echo "使用 -h 或 --help 查看帮助信息"
      exit 1
      ;;
  esac
done

# 检查并杀死占用端口的进程
kill_process_on_port() {
  PORT=$1
  echo -e "${BLUE}检查端口 $PORT...${NC}"
  # 使用 fuser 查找并杀死进程
  if fuser $PORT/tcp >/dev/null 2>&1; then
    echo -e "${YELLOW}端口 $PORT 被占用，正在尝试终止相关进程...${NC}"
    fuser -k $PORT/tcp
    sleep 2 # 等待进程终止
    if fuser $PORT/tcp >/dev/null 2>&1; then
        echo -e "${YELLOW}无法自动终止进程，请手动检查并终止。${NC}"
    else
        echo -e "${GREEN}端口 $PORT 已释放。${NC}"
    fi
  else
    echo -e "${GREEN}端口 $PORT 未被占用。${NC}"
  fi
}

if [ "$DEMON_MODE" = true ]; then
  echo -e "${GREEN}启动调度系统（后台模式）...${NC}"
else
  echo -e "${GREEN}启动调度系统（前台模式）...${NC}"
fi

# 检查后端和前端端口
kill_process_on_port 5000
kill_process_on_port 8173

# 启动后端
echo -e "${BLUE}启动后端服务...${NC}"
cd backend
# 检查是否存在虚拟环境
if [ -d "venv" ]; then
  source venv/bin/activate
else
  echo "创建Python虚拟环境..."
  python3 -m venv venv
  source venv/bin/activate
  pip install -r requirements.txt
fi

# 确保 instance 文件夹存在
mkdir -p instance

# 设置绝对路径的数据库URL并导出
export DATABASE_URL="sqlite:///$(pwd)/instance/dispatch_system.db"
echo "Database URL set to: $DATABASE_URL"

# 初始化数据库
flask init-db

# 后台运行Flask应用
nohup python wsgi.py > backend.log 2>&1 &
BACKEND_PID=$!

# 等待后端服务启动
echo "Waiting for backend to start..."
while ! curl -s http://localhost:5000/ > /dev/null; do
    sleep 1
done
echo "Backend started."

# 检查移动端工单获取功能
echo -e "${BLUE}检查移动端工单获取功能...${NC}"
sleep 2 # 给后端一些额外时间完全启动

# 尝试获取处理中的工单
IN_PROGRESS_RESPONSE=$(curl -s "http://localhost:5000/api/work-orders?per_page=100&area_filter=true&status=in_progress")
if [[ $IN_PROGRESS_RESPONSE == *'"work_orders"'* ]]; then
    echo -e "${GREEN}移动端处理中工单获取功能正常${NC}"
else
    echo -e "${YELLOW}移动端处理中工单获取功能异常，请检查后端日志${NC}"
fi

# 尝试获取待接单的工单
PENDING_RESPONSE=$(curl -s "http://localhost:5000/api/work-orders?per_page=100&area_filter=true&status=pending")
if [[ $PENDING_RESPONSE == *'"work_orders"'* ]]; then
    echo -e "${GREEN}移动端待接单工单获取功能正常${NC}"
else
    echo -e "${YELLOW}移动端待接单工单获取功能异常，请检查后端日志${NC}"
fi
echo -e "${GREEN}后端服务已启动，PID: $BACKEND_PID${NC}"

# 启动前端
echo -e "${BLUE}启动前端服务...${NC}"
cd ../frontend
# 检查是否安装了依赖
if [ ! -d "node_modules" ]; then
  echo "安装前端依赖..."
  npm install
fi

# 启动前端开发服务器
if [ "$DEMON_MODE" = true ]; then
  nohup npm run dev > frontend.log 2>&1 &
  FRONTEND_PID=$!
else
  npm run dev &
  FRONTEND_PID=$!
fi
echo -e "${GREEN}前端服务已启动，PID: $FRONTEND_PID${NC}"

echo -e "${GREEN}调度系统已启动!${NC}"
echo -e "${BLUE}后端地址: http://localhost:5000${NC}"
echo -e "${BLUE}前端地址: http://localhost:8173${NC}"

# 获取本机IP地址
LOCAL_IP=$(hostname -I | awk '{print $1}')
if [ ! -z "$LOCAL_IP" ]; then
  echo -e "${BLUE}局域网访问地址:${NC}"
  echo -e "${BLUE}  前端: http://$LOCAL_IP:8173${NC}"
  echo -e "${BLUE}  后端: http://$LOCAL_IP:5000${NC}"
fi

# 保存PID以便后续可以关闭服务
echo "$BACKEND_PID" > ../.backend_pid
echo "$FRONTEND_PID" > .frontend_pid

if [ "$DEMON_MODE" = true ]; then
  echo -e "${GREEN}服务已在后台启动完成！${NC}"
  echo -e "${BLUE}使用 './stop.sh' 停止服务${NC}"
  echo -e "${BLUE}查看后端日志: tail -f backend/backend.log${NC}"
  echo -e "${BLUE}查看前端日志: tail -f frontend/frontend.log${NC}"
else
  # 等待用户按Ctrl+C
  echo "按 Ctrl+C 停止服务..."
  trap "kill $BACKEND_PID $FRONTEND_PID; echo -e '${GREEN}服务已停止${NC}'; exit" INT
  wait
fi
